연산자 오버로딩은 기존의 연산자(+, -, *, == 등)에 새로운 기능을 부여하여, 사용자가 정의한 클래스에 맞게 동작하게 만드는 기능이야. 파이썬에서는 클래스 내부에 특정한 메서드를 정의함으로써 연산자 오버로딩을 구현할 수 있어.
예를 들어 두 벡터 객체를 더하고 싶다고 해보자. 그냥 +
연산자를 쓰면 오류가 나지만, 연산자 오버로딩을 하면 v1 + v2
처럼 직관적인 문법을 사용할 수 있어.
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
return Vector(self.x + other.x, self.y + other.y)
def __repr__(self):
return f"Vector({self.x}, {self.y})"
v1 = Vector(1, 2)
v2 = Vector(3, 4)
print(v1 + v2) # 결과: Vector(4, 6)
__add__(self, other)
: + 연산자__sub__(self, other)
: - 연산자__mul__(self, other)
: * 연산자__truediv__(self, other)
: / 연산자__eq__(self, other)
: == 비교 연산자__lt__(self, other)
: < 연산자__getitem__(self, key)
: 인덱싱 연산자 ([])연산자 오버로딩은 코드의 가독성을 높이고, 사용자 정의 타입을 내장 타입처럼 사용할 수 있게 해줘. 하지만 지나치게 남용하면 오히려 혼란을 줄 수 있기 때문에 신중하게 사용하는 게 좋아.